﻿/* ****************************************************************************
 *
 * Copyright (c) Microsoft Corporation. 
 *
 * This source code is subject to terms and conditions of the Microsoft Public License. A 
 * copy of the license can be found in the License.html file at the root of this distribution. If 
 * you cannot locate the  Microsoft Public License, please send an email to 
 * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound 
 * by the terms of the Microsoft Public License.
 *
 * You must not remove this notice, or any other, from this software.
 *
 * THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
 * KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
 * PARTICULAR PURPOSE.
 * ***************************************************************************/

// PGLISAPIDemo.cpp - Fichier d'impl閙entation pour ISAPI
//    PGLISAPIDemo Extension

#include "stdafx.h"
#include "PGLISAPIRenderer.h"
#include "PGLISAPIDemo.h"
#include "PGLDemo.h"

// Seul et unique objet CWinApp
// REMARQUE? Vous pouvez supprimer cet objet si vous modifiez votre projet afin de ne plus
// utiliser MFC dans une DLL.

CWinApp theApp;


// table d'analyse des commandes

BEGIN_PARSE_MAP(CPGLISAPIDemoExtension, CHttpServer)
	// TODO? ins閞ez ici ON_PARSE_COMMAND() et 
	// ON_PARSE_COMMAND_PARAMS() pour traiter vos commandes.
	// Par exemple?

	ON_PARSE_COMMAND(Default, CPGLISAPIDemoExtension, ITS_EMPTY)
	DEFAULT_PARSE_COMMAND(Default, CPGLISAPIDemoExtension)
	ON_PARSE_COMMAND(GetDemo, CPGLISAPIDemoExtension, ITS_PSTR ITS_I2 ITS_I2 ITS_PSTR)
	ON_PARSE_COMMAND_PARAMS("name=simple width=320 height=200 mime=png")

END_PARSE_MAP(CPGLISAPIDemoExtension)



// Seul et unique objet CPGLISAPIDemoExtension

CPGLISAPIDemoExtension theExtension;



// Impl閙entation CPGLISAPIDemoExtension

CPGLISAPIDemoExtension::CPGLISAPIDemoExtension()
{
}

CPGLISAPIDemoExtension::~CPGLISAPIDemoExtension()
{
}

BOOL CPGLISAPIDemoExtension::GetExtensionVersion(HSE_VERSION_INFO* pVer)
{
	// Appelez l'impl閙entation par d閒aut pour l'initialisation
	CHttpServer::GetExtensionVersion(pVer);

	m_GDIpInitializer.Initialize();

	// Chargez la cha頽e de description
	TCHAR sz[HSE_MAX_EXT_DLL_NAME_LEN+1];
	ISAPIVERIFY(::LoadString(AfxGetResourceHandle(),
			IDS_SERVER, sz, HSE_MAX_EXT_DLL_NAME_LEN));
	_tcscpy(pVer->lpszExtensionDesc, sz);
	return TRUE;
}

BOOL CPGLISAPIDemoExtension::TerminateExtension(DWORD dwFlags)
{
	m_GDIpInitializer.Deinitialize();

	return TRUE;
}


// Gestionnaire de commandes CPGLISAPIDemoExtension
 
void CPGLISAPIDemoExtension::Default(CHttpServerContext* pCtxt)
{
	StartContent(pCtxt);
	WriteTitle(pCtxt);

	*pCtxt<<_T("<p>Call GetDemo...</p>\r\n");

	EndContent(pCtxt);
}

void CPGLISAPIDemoExtension::GetDemo(CHttpServerContext* pCtxt, LPTSTR pszName, int iWidth, int iHeight, LPTSTR szImageType)
{
	CPGLDemo* pDemo = new CPGLDemo;
	if (!pDemo)
		return;

	CString str=szImageType;
	CPGLISAPIRenderer::EOutputType eOutputType=CPGLISAPIRenderer::OutputPNG;
	if (str==_T("jpeg") || str==_T("jpg"))
		eOutputType = CPGLISAPIRenderer::OutputJPG;
	else if (str==_T("bmp"))
		eOutputType = CPGLISAPIRenderer::OutputBMP;
	else if (str==_T(".svg"))
		eOutputType = CPGLISAPIRenderer::OutputSVG;


	CPGLRegionPtr pRegion=pDemo->RenderExample( pszName );
	CPGLISAPIRenderer* pRenderer = new CPGLISAPIRenderer( this,pCtxt,
		pRegion,
		iWidth, 
		iHeight, 
		eOutputType);
	pRenderer->WriteRegion();

	delete pRenderer;
	delete pDemo;
}



// Si votre extension ne doit pas utiliser MFC, vous aurez besoin de ce code pour vous assurer
// que les objets d'extension peuvent trouver le handle de ressource pour le
// module. Si vous convertissez votre extension afin qu'elle ne soit pas d閜endante de MFC,
// supprimez les commentaires autour des fonctions AfxGetResourceHandle()
// et DllMain() suivantes, ainsi que g_hInstance global.

/****

static HINSTANCE g_hInstance;

HINSTANCE AFXISAPI AfxGetResourceHandle()
{
	return g_hInstance;
}

BOOL WINAPI DllMain(HINSTANCE hInst, ULONG ulReason,
					LPVOID lpReserved)
{
	if (ulReason == DLL_PROCESS_ATTACH)
	{
		g_hInstance = hInst;
	}

	return TRUE;
}

****/
